home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / MPW Oberon 2.1168 / OInterfaces / Power.mod < prev    next >
Encoding:
Text File  |  1995-08-10  |  12.9 KB  |  394 lines  |  [TEXT/MPS ]

  1. (*
  2.      File:        Power.mod
  3.  
  4.      Contains:    Power (PowerBooks and Duos) Manager Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Package:    Universal Interfaces 2.0 in “MPW Latest” on ETO #17
  8.  
  9.      Copyright:    © 1984-1995 by Apple Computer, Inc.
  10.                  All rights reserved.
  11.  
  12.      Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  13.                  stack.  Include the file and version information (from above)
  14.                  in the problem description and send to:
  15.                      Internet:    apple.bugs.applelink.apple.com
  16.                      AppleLink:    APPLE.BUGS
  17.  
  18. *)
  19.  
  20. (*$TAGS-*)
  21. (*$CALLING PASCAL*)
  22. MODULE Power;
  23.  
  24. IMPORT SYSTEM, Types;
  25.  
  26. (* $PUSH*)
  27. (* $ALIGN MAC68K*)
  28. (* $LibExport+*)
  29.  
  30. CONST
  31. (* Bit positions for Power.ModemByte *)
  32.     modemOnBit*                    = 0;
  33.     ringWakeUpBit*                = 2;
  34.     modemInstalledBit*            = 3;
  35.     ringDetectBit*                = 4;
  36.     modemOnHookBit*                = 5;
  37. (* masks for Power.ModemByte *)
  38.     modemOnMask*                    = $01;
  39.     ringWakeUpMask*                = $04;
  40.     modemInstalledMask*            = $08;
  41.     ringDetectMask*                = $10;
  42.     modemOnHookMask*                = $20;
  43. (* bit positions for Power.BatteryByte *)
  44.     chargerConnBit*                = 0;
  45.     hiChargeBit*                    = 1;
  46.     chargeOverFlowBit*            = 2;
  47.     batteryDeadBit*                = 3;
  48.     batteryLowBit*                = 4;
  49.     connChangedBit*                = 5;
  50. (* masks for Power.BatteryByte *)
  51.     chargerConnMask*                = $01;
  52.     hiChargeMask*                = $02;
  53.     chargeOverFlowMask*            = $04;
  54.     batteryDeadMask*                = $08;
  55.     batteryLowMask*                = $10;
  56.     connChangedMask*                = $20;
  57.  
  58. (* commands to Power.SleepQRec sleepQProc *)
  59.     sleepRequest*                = 1;
  60.     sleepDemand*                    = 2;
  61.     sleepWakeUp*                    = 3;
  62.     sleepRevoke*                    = 4;
  63.     sleepUnlock*                    = 4;
  64.     sleepDeny*                    = 5;
  65.     sleepNow*                    = 6;
  66.     dozeDemand*                    = 7;
  67.     dozeWakeUp*                    = 8;
  68.     dozeRequest*                    = 9;
  69. (* Power.SleepQRec.sleepQFlags *)
  70.     noCalls*                        = 1;
  71.     noRequest*                    = 2;
  72.     slpQType*                    = 16;
  73.     sleepQType*                    = 16;
  74.  
  75. (* bits in bitfield returned by PMFeatures *)
  76.     hasWakeupTimer*                = 0;                            (* 1=wakeup timer is supported                        *)
  77.     hasSharedModemPort*            = 1;                            (* 1=modem port shared by SCC and internal modem    *)
  78.     hasProcessorCycling*            = 2;                            (* 1=processor cycling is supported                    *)
  79.     mustProcessorCycle*            = 3;                            (* 1=processor cycling should not be turned off        *)
  80.     hasReducedSpeed*                = 4;                            (* 1=processor can be started up at reduced speed    *)
  81.     dynamicSpeedChange*            = 5;                            (* 1=processor speed can be switched dynamically    *)
  82.     hasSCSIDiskMode*                = 6;                            (* 1=SCSI Disk Mode is supported                    *)
  83.     canGetBatteryTime*            = 7;                            (* 1=battery time can be calculated                    *)
  84.     canWakeupOnRing*                = 8;                            (* 1=can wakeup when the modem detects a ring        *)
  85.     hasDimmingSupport*            = 9;                            (* 1=has dimming support built in                    *)
  86.     hasStartupTimer*                = 10;                            (* 1=startup timer is supported                        *)
  87.  
  88. (* bits in bitfield returned by GetIntModemInfo and set by SetIntModemState *)
  89.     hasInternalModem*            = 0;                            (* 1=internal modem installed                        *)
  90.     intModemRingDetect*            = 1;                            (* 1=internal modem has detected a ring                *)
  91.     intModemOffHook*                = 2;                            (* 1=internal modem is off hook                        *)
  92.     intModemRingWakeEnb*            = 3;                            (* 1=wakeup on ring is enabled                        *)
  93.     extModemSelected*            = 4;                            (* 1=external modem selected                        *)
  94.     modemSetBit*                    = 15;                            (* 1=set bit, 0=clear bit (SetIntModemState)        *)
  95.  
  96. (* bits in BatteryInfo.flags                                     *)
  97. (* ("chargerConnected" doesn't mean the charger is plugged in)    *)
  98.     batteryInstalled*            = 7;                            (* 1=battery is currently connected                    *)
  99.     batteryCharging*                = 6;                            (* 1=battery is being charged                        *)
  100.     chargerConnected*            = 5;                            (* 1=charger is connected to the PowerBook            *)
  101.  
  102.     HDPwrQType*                    = 'HD';                            (* hard disk spindown queue element type            *)
  103.     PMgrStateQType*                = 'PM';
  104.  
  105.  
  106. TYPE
  107.     BatteryInfo* = (*ΔΔPACKEDΔΔ*) RECORD
  108.         flags*:                    Types.UInt8;                                    (* misc flags (see below)                            *)
  109.         warningLevel*:            Types.UInt8;                                    (* scaled warning level (0-255)                        *)
  110.         reserved*:                Types.UInt8;                                    (* reserved for internal use                        *)
  111.         batteryLevel*:            Types.UInt8;                                    (* scaled battery level (0-255)                        *)
  112.     END;
  113.  
  114.     ModemByte* = Types.SInt8;
  115.  
  116.     BatteryByte* = Types.SInt8;
  117.  
  118.     PMResultCode* = LONGINT;
  119.  
  120.     SleepQRecPtr* = POINTER TO SleepQRec;
  121.  
  122.     (*
  123.         SleepQProcPtr uses register based parameters on the 68k and cannot
  124.         be written in or called from a high-level language without the help of
  125.         mixed mode or assembly glue.
  126.  
  127.         In*:
  128.          => message         D0.L
  129.          => qRecPtr         A0.L
  130.         Out*:
  131.          <= return value    D0.L
  132.     *)
  133.     SleepQProcPtr* = Types.Register68kProcPtr;  (* register PROCEDURE SleepQ*(message: LONGINT; qRecPtr: SleepQRecPtr): LONGINT; *)
  134.     SleepQUPP* = Types.UniversalProcPtr;
  135.  
  136.     SleepQPtr* = POINTER TO SleepQRec;
  137.     SleepQRec* = RECORD
  138.         sleepQLink*:                SleepQPtr(*ΔΔ POINTER TO SleepQRec*);                                (* pointer to next queue element                *)
  139.         sleepQType*:                INTEGER;                                (* queue element type (must be SleepQType)        *)
  140.         sleepQProc*:                SleepQUPP;                                (* pointer to sleep universal proc ptr            *)
  141.         sleepQFlags*:            INTEGER;                                (* flags                                        *)
  142.     END;
  143.  
  144.     HDQueuePtr* = POINTER TO HDQueueElement;
  145.     HDSpindownUPP* = Types.UniversalProcPtr;
  146.     HDQueueElement* = RECORD
  147.         hdQLink*:                HDQueuePtr (*ΔΔ POINTER TO HDQueueElement*);                        (* pointer to next queue element                *)
  148.         hdQType*:                INTEGER;                                (* queue element type (must be HDPwrQType)        *)
  149.         hdFlags*:                INTEGER;                                (* miscellaneous flags                            *)
  150.         hdProc*:                    HDSpindownUPP;                            (* pointer to routine to call                    *)
  151.         hdUser*:                    LONGINT;                                (* user-defined (variable storage, etc.)        *)
  152.     END;
  153.     HDSpindownProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (VAR theElement: HDQueueElement);
  154.  
  155.     BatteryTimeRec* = RECORD
  156.         expectedBatteryTime*:    LONGINT;                                (* estimated battery time remaining (seconds)    *)
  157.         minimumBatteryTime*:        LONGINT;                                (* minimum battery time remaining (seconds)        *)
  158.         maximumBatteryTime*:        LONGINT;                                (* maximum battery time remaining (seconds)        *)
  159.         timeUntilCharged*:        LONGINT;                                (* time until battery is fully charged (seconds)*)
  160.     END;
  161.  
  162.     WakeupTime* = RECORD
  163.         wakeTime*:                LONGINT;                                (* wakeup time (same format as current time)        *)
  164.         wakeEnabled*:            BOOLEAN;                                (* 1=enable wakeup timer, 0=disable wakeup timer    *)
  165.     END;
  166.  
  167.     StartupTime* = RECORD
  168.         startTime*:                LONGINT;                                (* startup time (same format as current time)        *)
  169.         startEnabled*:            BOOLEAN;                                (* 1=enable startup timer, 0=disable startup timer    *)
  170.     END;
  171.  
  172.  
  173. PROCEDURE DisableWUTime*(): Types.OSErr;
  174.     EXTERNAL PASCAL;
  175. PROCEDURE SetWUTime*(WUTime: LONGINT): Types.OSErr;
  176.     EXTERNAL PASCAL;
  177. PROCEDURE GetWUTime*(VAR WUTime: LONGINT; VAR WUFlag: Types.SignedByte): Types.OSErr;
  178.     EXTERNAL PASCAL;
  179. PROCEDURE BatteryStatus*(VAR Status: Types.SignedByte; VAR Power: Types.SignedByte): Types.OSErr;
  180.     EXTERNAL PASCAL;
  181. PROCEDURE ModemStatus*(VAR Status: Types.SignedByte): Types.OSErr;
  182.     EXTERNAL PASCAL;
  183. PROCEDURE IdleUpdate*(): LONGINT;
  184.     (*$IF NOT GENERATINGCFM*)
  185.     INLINE PASCAL $A285, $2E80;
  186.     (*$END*)
  187. PROCEDURE GetCPUSpeed*(): LONGINT;
  188.     (*$IF NOT GENERATINGCFM*)
  189.     INLINE PASCAL $70FF, $A485, $2E80;
  190.     (*$END*)
  191. PROCEDURE EnableIdle*;
  192.     (*$IF NOT GENERATINGCFM*)
  193.     INLINE PASCAL $7000, $A485;
  194.     (*$END*)
  195. PROCEDURE DisableIdle*;
  196.     (*$IF NOT GENERATINGCFM*)
  197.     INLINE PASCAL $7001, $A485;
  198.     (*$END*)
  199. PROCEDURE SleepQInstall*(qRecPtr: SleepQRecPtr);
  200.     (*$IF NOT GENERATINGCFM*)
  201.     INLINE PASCAL $205F, $A28A;
  202.     (*$END*)
  203. PROCEDURE SleepQRemove*(qRecPtr: SleepQRecPtr);
  204.     (*$IF NOT GENERATINGCFM*)
  205.     INLINE PASCAL $205F, $A48A;
  206.     (*$END*)
  207. PROCEDURE AOn*;
  208.     (*$IF NOT GENERATINGCFM*)
  209.     INLINE PASCAL $7004, $A685;
  210.     (*$END*)
  211. PROCEDURE AOnIgnoreModem*;
  212.     (*$IF NOT GENERATINGCFM*)
  213.     INLINE PASCAL $7005, $A685;
  214.     (*$END*)
  215. PROCEDURE BOn*;
  216.     (*$IF NOT GENERATINGCFM*)
  217.     INLINE PASCAL $7000, $A685;
  218.     (*$END*)
  219. PROCEDURE AOff*;
  220.     (*$IF NOT GENERATINGCFM*)
  221.     INLINE PASCAL $7084, $A685;
  222.     (*$END*)
  223. PROCEDURE BOff*;
  224.     (*$IF NOT GENERATINGCFM*)
  225.     INLINE PASCAL $7080, $A685;
  226.     (*$END*)
  227. (* Public Power Management API (NEW!) *)
  228. PROCEDURE PMSelectorCount*(): INTEGER;
  229.     (*$IF NOT GENERATINGCFM*)
  230.     INLINE PASCAL $7000, $A09E, $3E80;
  231.     (*$END*)
  232. PROCEDURE PMFeatures*(): LONGINT;
  233.     (*$IF NOT GENERATINGCFM*)
  234.     INLINE PASCAL $7001, $A09E, $2E80;
  235.     (*$END*)
  236. PROCEDURE GetSleepTimeout*(): Types.UInt8;
  237.     (*$IF NOT GENERATINGCFM*)
  238.     INLINE PASCAL $7002, $A09E, $1E80;
  239.     (*$END*)
  240. PROCEDURE SetSleepTimeout*(timeout: Types.ByteParameter);
  241.     (*$IF NOT GENERATINGCFM*)
  242.     INLINE PASCAL $101F, $4840, $303C, $0003, $A09E;
  243.     (*$END*)
  244. PROCEDURE GetHardDiskTimeout*(): Types.UInt8;
  245.     (*$IF NOT GENERATINGCFM*)
  246.     INLINE PASCAL $7004, $A09E, $1E80;
  247.     (*$END*)
  248. PROCEDURE SetHardDiskTimeout*(timeout: Types.ByteParameter);
  249.     (*$IF NOT GENERATINGCFM*)
  250.     INLINE PASCAL $101F, $4840, $303C, $0005, $A09E;
  251.     (*$END*)
  252. PROCEDURE HardDiskPowered*(): BOOLEAN;
  253.     (*$IF NOT GENERATINGCFM*)
  254.     INLINE PASCAL $7006, $A09E, $1E80;
  255.     (*$END*)
  256. PROCEDURE SpinDownHardDisk*;
  257.     (*$IF NOT GENERATINGCFM*)
  258.     INLINE PASCAL $7007, $A09E;
  259.     (*$END*)
  260. PROCEDURE IsSpindownDisabled*(): BOOLEAN;
  261.     (*$IF NOT GENERATINGCFM*)
  262.     INLINE PASCAL $7008, $A09E, $1E80;
  263.     (*$END*)
  264. PROCEDURE SetSpindownDisable*(setDisable: BOOLEAN);
  265.     (*$IF NOT GENERATINGCFM*)
  266.     INLINE PASCAL $101F, $4840, $303C, $0009, $A09E;
  267.     (*$END*)
  268. PROCEDURE HardDiskQInstall*(VAR theElement: HDQueueElement): Types.OSErr;
  269.     (*$IF NOT GENERATINGCFM*)
  270.     INLINE PASCAL $205F, $700A, $A09E, $3E80;
  271.     (*$END*)
  272. PROCEDURE HardDiskQRemove*(VAR theElement: HDQueueElement): Types.OSErr;
  273.     (*$IF NOT GENERATINGCFM*)
  274.     INLINE PASCAL $205F, $700B, $A09E, $3E80;
  275.     (*$END*)
  276. PROCEDURE GetScaledBatteryInfo*(whichBattery: INTEGER; VAR theInfo: BatteryInfo);
  277.     (*$IF NOT GENERATINGCFM*)
  278.     INLINE PASCAL $205F, $301F, $4840, $303C, $000C, $A09E, $2080;
  279.     (*$END*)
  280. PROCEDURE AutoSleepControl*(enableSleep: BOOLEAN);
  281.     (*$IF NOT GENERATINGCFM*)
  282.     INLINE PASCAL $101F, $4840, $303C, $000D, $A09E;
  283.     (*$END*)
  284. PROCEDURE GetIntModemInfo*(): LONGINT;
  285.     (*$IF NOT GENERATINGCFM*)
  286.     INLINE PASCAL $700E, $A09E, $2E80;
  287.     (*$END*)
  288. PROCEDURE SetIntModemState*(theState: INTEGER);
  289.     (*$IF NOT GENERATINGCFM*)
  290.     INLINE PASCAL $301F, $4840, $303C, $000F, $A09E;
  291.     (*$END*)
  292. PROCEDURE MaximumProcessorSpeed*(): INTEGER;
  293.     (*$IF NOT GENERATINGCFM*)
  294.     INLINE PASCAL $7010, $A09E, $3E80;
  295.     (*$END*)
  296. PROCEDURE CurrentProcessorSpeed*(): INTEGER;
  297.     (*$IF NOT GENERATINGCFM*)
  298.     INLINE PASCAL $7011, $A09E, $3E80;
  299.     (*$END*)
  300. PROCEDURE FullProcessorSpeed*(): BOOLEAN;
  301.     (*$IF NOT GENERATINGCFM*)
  302.     INLINE PASCAL $7012, $A09E, $1E80;
  303.     (*$END*)
  304. PROCEDURE SetProcessorSpeed*(fullSpeed: BOOLEAN): BOOLEAN;
  305.     (*$IF NOT GENERATINGCFM*)
  306.     INLINE PASCAL $101F, $4840, $303C, $0013, $A09E, $1E80;
  307.     (*$END*)
  308. PROCEDURE GetSCSIDiskModeAddress*(): INTEGER;
  309.     (*$IF NOT GENERATINGCFM*)
  310.     INLINE PASCAL $7014, $A09E, $3E80;
  311.     (*$END*)
  312. PROCEDURE SetSCSIDiskModeAddress*(scsiAddress: INTEGER);
  313.     (*$IF NOT GENERATINGCFM*)
  314.     INLINE PASCAL $301F, $4840, $303C, $0015, $A09E;
  315.     (*$END*)
  316. PROCEDURE GetWakeupTimer*(VAR theTime: WakeupTime);
  317.     (*$IF NOT GENERATINGCFM*)
  318.     INLINE PASCAL $205F, $7016, $A09E;
  319.     (*$END*)
  320. PROCEDURE SetWakeupTimer*(VAR theTime: WakeupTime);
  321.     (*$IF NOT GENERATINGCFM*)
  322.     INLINE PASCAL $205F, $7017, $A09E;
  323.     (*$END*)
  324. PROCEDURE IsProcessorCyclingEnabled*(): BOOLEAN;
  325.     (*$IF NOT GENERATINGCFM*)
  326.     INLINE PASCAL $7018, $A09E, $1E80;
  327.     (*$END*)
  328. PROCEDURE EnableProcessorCycling*(enable: BOOLEAN);
  329.     (*$IF NOT GENERATINGCFM*)
  330.     INLINE PASCAL $101F, $4840, $303C, $0019, $A09E;
  331.     (*$END*)
  332. PROCEDURE BatteryCount*(): INTEGER;
  333.     (*$IF NOT GENERATINGCFM*)
  334.     INLINE PASCAL $701A, $A09E, $3E80;
  335.     (*$END*)
  336. PROCEDURE GetBatteryVoltage*(whichBattery: INTEGER): Types.Fixed;
  337.     (*$IF NOT GENERATINGCFM*)
  338.     INLINE PASCAL $301F, $4840, $303C, $001B, $A09E, $2E80;
  339.     (*$END*)
  340. PROCEDURE GetBatteryTimes*(whichBattery: INTEGER; VAR theTimes: BatteryTimeRec);
  341.     (*$IF NOT GENERATINGCFM*)
  342.     INLINE PASCAL $205F, $301F, $4840, $303C, $001C, $A09E;
  343.     (*$END*)
  344. PROCEDURE GetDimmingTimeout*(): Types.UInt8;
  345.     (*$IF NOT GENERATINGCFM*)
  346.     INLINE PASCAL $701D, $A09E, $1E80;
  347.     (*$END*)
  348. PROCEDURE SetDimmingTimeout*(timeout: Types.ByteParameter);
  349.     (*$IF NOT GENERATINGCFM*)
  350.     INLINE PASCAL $101F, $4840, $303C, $001E, $A09E;
  351.     (*$END*)
  352. PROCEDURE DimmingControl*(enableSleep: BOOLEAN);
  353.     (*$IF NOT GENERATINGCFM*)
  354.     INLINE PASCAL $101F, $4840, $303C, $001F, $A09E;
  355.     (*$END*)
  356. PROCEDURE IsDimmingControlDisabled*(): BOOLEAN;
  357.     (*$IF NOT GENERATINGCFM*)
  358.     INLINE PASCAL $7020, $A09E, $1E80;
  359.     (*$END*)
  360. PROCEDURE IsAutoSlpControlDisabled*(): BOOLEAN;
  361.     (*$IF NOT GENERATINGCFM*)
  362.     INLINE PASCAL $7021, $A09E, $1E80;
  363.     (*$END*)
  364. CONST
  365.     uppSleepQProcInfo* = $00131832; (* Register PROCEDURE (4 bytes in D0, 4 bytes in A0): 4 bytes in D0; *)
  366.     uppHDSpindownProcInfo* = $000000C0; (* PROCEDURE (4 byte param); *)
  367.  
  368. PROCEDURE NewSleepQProc*(userRoutine: SleepQProcPtr): SleepQUPP;
  369.     (*$IF NOT GENERATINGCFM *)
  370.     INLINE PASCAL $2E9F;
  371.     (*$END*)
  372.  
  373. PROCEDURE NewHDSpindownProc*(userRoutine: HDSpindownProcPtr): HDSpindownUPP;
  374.     (*$IF NOT GENERATINGCFM *)
  375.     INLINE PASCAL $2E9F;
  376.     (*$END*)
  377.  
  378. PROCEDURE CallSleepQProc*(message: LONGINT; qRecPtr: SleepQRecPtr; userRoutine: SleepQUPP): LONGINT;
  379.     (*$IF NOT GENERATINGCFM*)
  380.     INLINE PASCAL ; (*••*)
  381.     (*To be implemented*:  Glue to move parameters into registers.*)
  382.     (*$END*)
  383.  
  384. PROCEDURE CallHDSpindownProc*(VAR theElement: HDQueueElement; userRoutine: HDSpindownUPP);
  385.     (*$IF NOT GENERATINGCFM*)
  386.     INLINE PASCAL $205F, $4E90;
  387.     (*$END*)
  388.  
  389. (* $ALIGN RESET*)
  390. (* $POP*)
  391.  
  392.  END Power.
  393.  
  394.